MySQL 函数

MySQL REGEXP 函数用于执行正则表达式匹配。如果表达式与pattern指定的正则表达式匹配,则返回1,否则返回0。如果表达式或pattern为 NULL,则返回值为 NULL。

REGEXP 函数执行不区分大小写的匹配,除非与二进制字符串一起使用。

REGEXP function 是 RLIKE 函数的同义词。

语法

expression REGEXP pattern 

    参数

    expression必需。 指定字符表达式,例如列或字段。
    pattern必需。 指定正则表达式匹配信息。请参阅下表了解模式语法。

    正则表达式模式

    符号描述
    ^匹配字符串的开头。
    $匹配字符串的结尾字符串。
    *匹配零次或多次出现。
    +匹配一次或多次出现。
    ?匹配零次或一次出现。
    .匹配除 NULL 之外的任何字符。
    |像"OR"一样使用来指定多个替代字符。
    [ ]匹配 [] 内指定的任何单个字符。
    [^ ]匹配 [] 内未指定的任何单个字符。
    -表示字符范围。
    ( )用于将表达式分组为子表达式。
    {m}匹配 m
    {m,}匹配至少 m 次。
    {m,n}匹配至少 m 次,但不超过 n 次。
    \nn 是 1 到 9 之间的数字。匹配找到的第 n 个子表达式在 ( ) 内遇到 \n 之前。
    \d匹配数字字符。
    \D匹配非数字字符。
    \w匹配单词字符。
    \W匹配非单词字符。
    \s匹配空白字符。
    \s匹配空白字符。
    \S匹配非空白字符。
    *?匹配前面的模式出现零次或多次。
    +?匹配前面的模式出现一次或多次。
    ??匹配前面的模式零次或一次出现。
    ?匹配前面的模式n 次。
    ?与前面的模式匹配至少 n 次。
    ?匹配前面的模式至少 n 次,但不超过 m 次。
    [..]匹配一种排序规则可以是多个字符的元素。
    [=character_class=]表示一个等价类。它匹配具有相同排序值的所有字符,包括其自身。
    [:character_class:]表示匹配属于该字符的所有字符的字符类

    标准类名称列表

    字符类名称含义
    alnum字母数字字符
    alpha字母字符
    blank空白字符
    cntrl控制字符
    digit数字字符
    graph图形字符
    lower小写字母字符
    print图形或空格字符
    punct标点符号
    space空格、制表符、换行符和回车符
    upper大写字母字符
    xdigit十六进制数字字符

    示例:匹配多个替代项

    考虑一个名为Employee的表。以下查询用于从此表中获取 Name 包含"Ja"、"Je"或"Ji"的所有记录。要为模式的第二个字符指定多个替代字符,请使用 |

    SELECT * FROM Employee
    WHERE Name REGEXP 'J(a|e|i)'; 
    • 1

    示例:匹配开始

    考虑一个名为Employee 的表。下面的查询用于从该表中获取 Name 以"J"开头的所有记录。这里,^ 用于指定模式的起始字符。

    SELECT * FROM Employee
    WHERE Name REGEXP '^J'; 
    • 1

    示例:结尾匹配

    考虑一个名为Employee的表。以下查询用于从此表中获取 Name 以"n"结尾的所有记录。这里,$用于指定模式的结束字符。

    SELECT * FROM Employee
    WHERE Name REGEXP 'n$'; 
    • 1

    示例:匹配列表

    考虑一个名为 Employee 的表。以下查询用于从此表中获取 Name 包含"Ja"、"Jb"、"Jc"或"Jd"的所有记录。要指定模式的第二个字符,请使用 [  ],在本例中可以是"a"、"b"、"c"或"d"。

    SELECT * FROM Employee
    WHERE Name REGEXP 'J[a-d]'; 
    • 1

    示例:非匹配列表

    考虑一个名为Employee的表。以下查询用于从此表中获取 Name 不包含"Ja"、"Jb"、"Jc"或"Jd"的所有记录。 [ ^ ] 模式用于指定此处未列出的字符。

    SELECT * FROM Employee
    WHERE Name REGEXP 'J[^a-d]'; 
    • 1

    示例:匹配字符类

    考虑一个名为 Employee 的表。以下查询用于从此表中获取所有记录,其中 Address 包含以 123 开头的模式,其余字符为字母数字字符。

    SELECT * FROM Employee
    WHERE Address REGEXP '123[[:alnum:]]*'; 
    • 1

    示例:转义字符

    要在使用 REGEXP 函数时转义特殊字符,特殊字符前面应有两个反斜杠 \\。考虑一个名为 Employee 的表。下面的查询可用于获取该表中 Address 包含 ( 字符的所有记录。

    SELECT * FROM Employee
    WHERE Address REGEXP '\\('; 
    • 1